package 回溯;

import java.util.*;

/**
 * @author aodre , QQ : 480029069
 * @date 2023/9/22 15:18
 */
public class lc90子集II {




    public List<List<Integer>> solve(int nums[]) {
        List<List<Integer>> list = new ArrayList<>();
        Deque<Integer> path = new ArrayDeque<>();
        Arrays.sort(nums);
        recursion(0,nums,list,path,new boolean[nums.length]);
        return list;
    }

    public void recursion(int index,int nums[], List<List<Integer>> list, Deque<Integer> path,boolean vis[]) {
        if (index == nums.length) {
            list.add(new ArrayList<>(path));
            return;
        }
        recursion(index + 1, nums, list, path,vis);

        // choose 的时候， 再去去重才可以的， 这里要注意 一下
        if(index > 0 && nums[index] == nums[index - 1] && !vis[index - 1]){
            return ;
        }
        // choose
        path.addLast(nums[index]);
        recursion(index + 1, nums, list, path,vis);
        path.removeLast();
    }
}
